package com.gxd.base.mapper;

import java.util.Date;
import java.util.List;

import com.gxd.base.entity.*;
import org.apache.ibatis.annotations.Param;

import org.springframework.stereotype.Repository;

@Repository
public interface ManagerMapper {
	
	// 获取全部用户
	List<User> getUserList(@Param("sql") String sql);
	// 获取全部用户总条数
	int getUsersCount(@Param("sql") String sql);
	// 根据用户ID，获取用户记录
	User getUserById(@Param("userId") int userId);
	// 根据用户工号，获取用户
	User getUserByCode(@Param("userCode") String userCode);
	// 根据工号，冻结账号：0未冻结   1已冻结
	void updateUserState(@Param("userCode") String userCode, @Param("userState") String userState, @Param("nowDate") Date nowDate);
	// 修改用户信息
	void updateUser(@Param("user") User user);
	// 修改密码
	void updateUserPwd(@Param("user") User user);
	// 新增用户
	void addUser(@Param("user") User user);
	
	// 获取全部单位
	List<Organization> getOrganizationList(@Param("sql") String sql);
	// 获取全部单位记录条数
	int getOrganizationCount(@Param("sql") String sql);
	// 获取顶级单位
	Organization getParentOrg();
	// 根据上级单位，获取子单位
	List<Organization> getOrgByParentOrgId(@Param("orgId") int orgId);
	// 根据ID，获取部门
	Organization getOrgById(@Param("orgId") int orgId);
	// 新增部门
	void addOrganization(@Param("org") Organization org);
	// 修改部门
	void updateOrganization(@Param("org") Organization org);
	// 根据部门编码，获取部门记录数
	int getOrganizationByCode(@Param("orgCode") String orgCode);
	
	// 获取全部省份
	List<Area> getProvince();
	// 根据地区ID，获取下级地区
	List<Area> getChildAreaById(@Param("areaId") String areaId);
	
	// 获取所有角色
	List<Role> getRoleList(@Param("sql") String sql);
	// 获取所有权限记录数
	int getFunctionCount(@Param("sql") String sql);
	// 根据权限ID，获取权限记录
	Function getFunctionById(@Param("functionId") int functionId);
	// 获取所有权限列表
	List<Function> getFunctionList(@Param("sql") String sql);
	// 获取用户下的权限
 	List<Function> getFunctionByUserId(@Param("userId") int userId);
 	// 获取用户下的权限（不限制状态）
  	List<Function> getAllFunctionByUserId(@Param("userId") int userId);
 	// 获取用户下的角色
  	List<Role> getRoleByUserId(@Param("userId") int userId);
  	// 获取用户下的角色（不限制状态）
   	List<Role> getAllRoleByUserId(@Param("userId") int userId);
	// 获取角色下的权限
	List<Function> getFunctionByRoleId(@Param("roleId") int roleId);
	// 获取角色下的权限（不限制状态）
	List<Function> getAllFunctionByRoleId(@Param("roleId") int roleId);
	// 修改用户权限状态
	void updateUserFunState(@Param("userId") int userId, @Param("funIdStr") String funIdStr);
	// 修改用户角色状态
	void updateUserRoleState(@Param("userId") int userId, @Param("funIdStr") String funIdStr);
	// 为用户添加权限
	void addUserFunction(@Param("uf") UserFunction uf);
	// 为用户添加角色
	void addUserRole(@Param("ur") UserRole ur);
	// 根据角色ID，修改角色状态
	void updateRoleState(@Param("roleId") int roleId, @Param("stateCode") String stateCode);
	// 添加角色
	void addRole(@Param("role") Role role);
	// 根据角色ID，获取角色
	Role getRoleByCode(@Param("roleCode") String roleCode);
	// 添加权限
	void addFunction(@Param("fun") Function fun);
	// 根据权限code，获取权限
	Function getFunctionByCode(@Param("funCode") String funCode);
	// 修改权限
	void updateFunction(@Param("fun") Function fun);
	// 给权限分配菜单
	void setFunctionMenus(@Param("funId") int funId, @Param("menuIds") String menuIds);
	// 添加权限菜单
	void addFunctionMenus(@Param("funId") int funId, @Param("menuIds") String menuIds);
	// 获取权限类型
	List<Dictionaries> getDicList();
	// 根据权限类型ID，获取类型记录
	Dictionaries getDicById(@Param("dicId") int dicId);
	// 修改权限状态
	void updateFunState(@Param("funId") int funId, @Param("stateCode") String stateCode, @Param("nowDate") Date nowDate);
	// 判断该权限，是否拥有查看所有菜单的权限
	boolean checkFunLookAllMenu(@Param("funId") int funId);
	// 查询权限菜单是否存在
	boolean checkFunMenuById(@Param("funId") int funId);
	// 给角色赋予权限
	void setRoleFunction(@Param("roleId") int roleId, @Param("funId") int funId, @Param("modifyDate") Date modifyDate);
	// 修改角色权限状态
	void updateRoleFunState(@Param("roleId") int roleId, @Param("funArray") String funArray);
	// 根据角色ID，获取角色
	Role getRoleById(@Param("roleId") int roleId);
	
	// 获取顶级菜单
	Menu getParentMenu();
	// 根据菜单ID，获取子菜单
	List<Menu> getMenusByParentId(@Param("menuId") int menuId, @Param("functionId") int functionId);
}